package com.lhkj.ct.meta.modules.patient.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lhkj.ct.base.mybatis.extension.service.BatchHandleService;
import com.lhkj.ct.base.mybatis.extension.service.IPageService;
import com.lhkj.ct.meta.modules.patient.model.dto.ArchiveConsolidationDto;
import com.lhkj.ct.meta.modules.patient.model.dto.PatBasicInfo;
import com.lhkj.ct.meta.modules.patient.model.dto.PatientQuery;
import com.lhkj.ct.meta.modules.patient.model.entity.TblPatCrowdTag;
import com.lhkj.ct.meta.modules.patient.model.entity.TblPatUnit;
import com.lhkj.ct.meta.modules.patient.model.entity.TblPatient;
import com.lhkj.ct.meta.modules.patient.model.vo.PatientBasicVo;
import com.lhkj.ct.meta.modules.patient.model.vo.PatientForm;
import com.lhkj.ct.meta.modules.patient.model.vo.PatientPageVo;
import com.lhkj.ct.meta.modules.psychology.model.bo.SubmitGaugeBo;

import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * <p>
 * 档案表 服务类
 * </p>
 *
 * @author jobob
 * @since 2023-09-17
 */
public interface PatientService extends BatchHandleService<TblPatient>, IPageService<TblPatient> {

    /**
     * 档案列表
     */
    IPage<PatientPageVo> getUserPage(PatientQuery patientQuery);

    /**
     * 档案列表
     */
    IPage<PatientBasicVo> getBasicUserPage(PatientQuery patientQuery);


    /**
     * 单位 -- 树级列表
     * @param patUnit
     * @return
     */
    List<TblPatUnit> selectPatUnitTreeWithCount(TblPatUnit patUnit);

    /**
     * 按标签分组并统计
     */
    List<TblPatCrowdTag> selectPatTagWithCount(TblPatCrowdTag tag);


    /**
     * 获取基本信息表单数据
     */
    PatientForm getForm(String id);

    /**
     * 保存档案
     */
    int savePatient(PatientForm patientForm);

    /**
     * 校验证件号码是否已存在
     * @return
     */
    boolean checkIdentNoUnique(TblPatient patient);

    /**
     * 查询提交作答时所需年龄，spm年龄，性别
     * @param patId
     * @return
     */
    SubmitGaugeBo.Patient getSubmitUserInfo(String patId);

    /**
     * 根据证件号/就诊卡/住院号查询
     * @param patient
     * @return
     */
    TblPatient selectByNo(TblPatient patient);

    /**
     * 逻辑删除,支持批量
     */
    int logicDelete(@NotBlank(message = "key不能为空") String id);

    /**
     * 上传头像
     */
    boolean updateUserAvatar(String userId, String avatarUrl);

    /**
     * 用户端个人中心 - 获取基本信息
     */
    PatBasicInfo getBasicInfo();

    /**
     * 用户端个人中心 - 更新基本信息
     */
    boolean updateBasicInfo(PatBasicInfo info);

    /**
     * 批量建档
     * @param patients
     */
    void batchCreate(List<TblPatient> patients);

    boolean consolidation(ArchiveConsolidationDto dto);
}
